import logging
import logging.handlers

'''日志收集'''
# 定义函数，初始化日志配置
# 文件名、缺省参数（文件切分的时间单位，间隔多少个时间单位(下一个)，备份保留多少份）
from config import BASE_DIR


def init_log_config(filename, when='midnight', interval=1, backup_count=7):
    # 1.创建日志器对象
    logger = logging.getLogger()
    # 日志级别：(从高到低，优先级越高，严重度越低，优先级低，严重度越高)：DEBUG->INFO->WARNING->ERROR->CRITICAL
    # 级别高的包含级别低的信息
    # 2.给日志器对象，设置日志打印级别
    logger.setLevel(logging.INFO)

    # 3.创建打印控制台处理器对象
    st = logging.StreamHandler()
    # 4.创建日志文件处理器对象
    # logging.handlers需要导包，点击前when，进入ctrl+b,可查看有哪些固定取值
    # 注意：多指定一个参数encoding='utf-8'
    fh = logging.handlers.TimedRotatingFileHandler(filename, when=when, interval=interval, backupCount=backup_count, encoding='utf-8')

    # 信息格式：时间、日志等级、文件名、方法名、行号、日志信息
    fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
    # 5.创建信息格式变量
    formatter = logging.Formatter(fmt)

    # 6.打印控制台处理器，设置信息格式
    st.setFormatter(formatter)
    # 7.日志文件处理器，设置信息格式
    fh.setFormatter(formatter)

    # 8.打印控制台处理器，添加到日志器对象
    logger.addHandler(st)
    # 9.日志文件处理器，添加到日志器对象
    logger.addHandler(fh)


if __name__ == '__main__':
    # 多次执行，写入信息追加内容
    # 相对路径：相对于当前logging_use.py文件，定义日志输出文件位置，相同log目录下生成a.log文件，log目录必须事先存在，否则报错
    init_log_config('log/a.log')  # 调用日志初始化配置函数
    logging.debug('我是debug信息')  # 写入debug信息
    logging.info('我是info信息')  # 写入info信息
    logging.warning('我是warning信息')  # 写入warning信息
    logging.error('我是error信息')  # 写入error信息
    logging.critical('我是critical信息')  # 写入critical信息

    # 绝对路径：BASE_DIR + 相对路径，路径拼接，不要忘记在前面加/
    init_log_config(BASE_DIR + '/log/b.log')
    logging.debug('我是debug信息:文件使用：绝对路径')
# 常用5种级别：debug、info、warning、error、critical
# 会打印指定级别levelname信息debug、info、warning、error、critical等信息
# 2025-01-05 17:34:33,703 DEBUG [logging_use.py(<module>:39)] - 我是debug信息
# 2025-01-05 17:34:33,703 INFO [logging_use.py(<module>:40)] - 我是info信息
# 2025-01-05 17:34:33,703 WARNING [logging_use.py(<module>:41)] - 我是warning信息
# 2025-01-05 17:34:33,704 ERROR [logging_use.py(<module>:42)] - 我是error信息
# 2025-01-05 17:34:33,704 CRITICAL [logging_use.py(<module>:43)] - 我是critical信息
